package cn.summit;

import java.util.HashMap;
import java.util.Map;

/**
 * 通过map维护每个字符,并记录当前begin的index,然后取,存在的话,begin往后移一格,不存在则算当前到 begin之间的距离
 *
 * @author summit
 * @since 2021/8/16 18:04
 */
public class 无重复字符的最长子串 {

	public static void main(String[] args) {

		String str = "aaaa1231321bcc";
		System.out.println("最大:" + getMax(str));

	}

	public static int getMax(String str) {
		Map<Character, Integer> map = new HashMap<>(str.length());
		int begin = 0;
		int max = 1;
		map.put(str.charAt(0), 0);

		for (int i = 0; i < str.length(); i++) {
			Integer ch = map.get(str.charAt(i));
			if (ch != null && ch >= begin) {
				// 已经重复 往后移一格
				begin = ch + 1;
			} else {
				max = Math.max(max, i - begin + 1);
			}
			map.put(str.charAt(i), i);
		}
		return max;
	}
}
